package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.Unit;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @description 商品信息
 */
public interface GoodsDao {


    String getMaxCode();


    /**
     * 查询总数量
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     */
    int getGoodsCount(@Param("codeOrName") String codeOrName, @Param("goodsTypeId") Integer goodsTypeId);

    /**
     * 分页查询所有的商品库存
     * @param offSet
     * @param rows
     * @param codeOrName
     * @param goodsTypeId
     * @return
     */
    List<Goods> queryGoodsPage(int offSet, Integer rows, String codeOrName, Integer goodsTypeId);
    List<Goods> queryGoodsPage2(int offSet, Integer rows, String codeOrName,@Param("goodIdList") List<Integer> goodIdList);

    /**
     * 查询所有的商品单位
     * @return
     */
    List<Unit> getUnitList();

    /**
     * 查询出所有的商品分类
     * @param pId
     * @return
     */
    List<GoodsType> queryGoodsType(@Param("pId") Integer pId);

    /**
     * 新增商品分类
     * @param goodsType
     * @return
     */
    int saveGoodsType(@Param("goodsType") GoodsType goodsType);

    /**
     * 根据主键Id查询商品分类
     * @param id
     * @return
     */
    GoodsType queryGoodsTypeById(@Param("id") Integer id);

    /**
     * 修改对应的商品分类状态
     * @param existGoodsType
     */
    void updateGoodsTypeState(@Param("existGoodsType") GoodsType existGoodsType);

    /**
     * 删除商品分类
     * @return
     */
    int deleteGoodsType(@Param("goodsTypeId") Integer goodsTypeId);

    /**
     * 插入商品信息
     * @param goods
     * @return
     */
    int insertGoods(@Param("goods") Goods goods);

    /**
     * 修改商品信息
     * @param goods
     * @return
     */
    int updateGoods(@Param("goods") Goods goods);

    /**
     * 根据id查询商品信息
     * @param goodsId
     * @return
     */
    Goods queryGoodsById(@Param("goodsId") Integer goodsId);

    /**
     * 根据id删除商品信息
     * @param goodsId
     * @return
     */
    int deleteGoodsById(@Param("goodsId") Integer goodsId);

    /**
     * 获取无库存商品数量
     * @param nameOrCode
     * @return
     */
    int getNoInventoryCount(@Param("nameOrCode") String nameOrCode);

    /**
     * 获取无库存商品信息
     * @param offSet
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getNoInventoryQuantity(@Param("offSet") int offSet, @Param("rows") Integer rows, @Param("nameOrCode") String nameOrCode);

    /**
     * 获取有库存商品数量
     * @param nameOrCode
     * @return
     */
    int getHasInventoryCount(@Param("nameOrCode") String nameOrCode);

    /**
     * 获取有库存商品信息
     * @param offSet
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getHasInventoryQuantity(@Param("offSet") int offSet, @Param("rows") Integer rows, @Param("nameOrCode") String nameOrCode);

    int saveStock(@Param("goodsId") Integer goodsId, @Param("inventoryQuantity") Integer inventoryQuantity, @Param("purchasingPrice") double purchasingPrice);

    List<Goods> listAlarm();
}
